package com.shengsiyuan.netty.firstexample;

import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.http.HttpServerCodec;

/**
 * 功能描述：
 *
 * @author: lpf
 * @date: 2019/6/11 19:00
 * @version: 1.0
 */
public class TestServerInitializer extends ChannelInitializer<SocketChannel> {

    /**
     * 功能描述：初始化管道。
     *
     * 一旦 Channel（连接） 被注册之后，这个方法就会被调用。
     *
     * HttpServerCodec 是 HttpRequestDecoder 和 HttpResponseEncoder 的组合体，使用它可以更简单的实现服务器端的http实现。
     *
     */
    @Override
    protected void initChannel(SocketChannel ch) throws Exception {

        // 管道。一个管道中可以有很多的 ChannelHandler，就像一个一个拦截器一样。
        ChannelPipeline pipeline = ch.pipeline();

        // 不要使用单例，每次要新创建一个对象
        //pipeline.addLast(new HttpServerCodec()); // 重载方法
        pipeline.addLast("httpServerCodec", new HttpServerCodec());

        // 自定义的处理器加入管道中
        pipeline.addLast("testHttpServerHandler", new TestServerHandler());
    }
}
